---
title: 正则表达式语法
date: '2023-04-01 12:12:12'
tags: ['正则']
draft: false
summary: 正则表达式(Regular Expression)是一种文本模式，包括普通字符（例如，a 到 z 之间的字母）和特殊字符（称为"元字符"），来描述、匹配一系列匹配某个句法规则的字符串。
---

### 用途

- 校验数据的有效性
- 查找符合要求的文本
- 对文本进行切割和替换
- ...

### 元字符分类

- 特殊单字符
  1.  . 任意字符（换行符除外）
  1.  \d 任意数字 \D 任意非数字
  1.  \w 任意字符数字下划线 \W 任意非字符数字下划线
  1.  \s 任意空白符 \W 任意非空白符
- 空白符
  1.  \r 回车符
  1.  \n 换行符
  1.  \f 换页符
  1.  \t 制表符
  1.  \v 垂直制表符
  1.  \s 任意空白符
- 量词
  1.  \* 0到多次
  1.  \+ 1到多次
  1.  ? 0到1次
  1.  \{x\} x次
  1.  `\{x,\}` 至少x次
  1.  \{x,y\} x到y次
- 范围
  1.  | 或
  1.  [...] 多选一
  1.  [a-z] a到z任意单个元素
  1.  [^...] 取反，不能是其中任意一个元素
- 断言（Assertion）
  1.  单词边界
  1.  行开始\结束
  1.  环视

### 模式

- 贪婪匹配（Greedy）：
  1.  表示次数的量词，默认都是贪婪，尝试尽可能最大长度去匹配
  1.  回溯：后面匹配不上，会回溯已匹配的再尝试
- 非贪婪匹配（Lazy）
  1.  量词后面加？，尽可能短地去匹配
  1.  回溯：后面匹配不上，会匹配更长再接着尝试
- 独占模式（Possessive）
  1.  量词后面加+，满足情况下尽可能长匹配
  1.  回溯：不回溯，匹配不上即失败

### 分组

- 功能
  1.  将部分子表达式看成整体
  1.  后续查找替换中引用分组
- 分组编号
  1.  第几个括号就是第几个分组
  1.  非捕获分组 (?:正则)
  1.  括号嵌套需要看左括号的序号
  1.  命名分组 (?P&lt;名称&gt;正则)
- 分组引用
  1.  查找：查找重复出现的部分
  1.  替换：对原有内容格式进行改写

### 匹配模式

- 不区分大小写模式（Case Insensitive）
  1.  (?i)
- 点号通配模式（Dot All）
  1.  (?s)
- 多行模式（Multiline）
  1.  (?m)
  1.  ^匹配开头 $匹配结尾
- 注释模式（Comment）
  1.  (?#comment)
